package cn.yujiago.api.alipay.service.impl;

import cn.yujiago.api.alipay.pojo.QRCode;
import cn.yujiago.api.alipay.service.AlipayService;
import cn.yujiago.api.alipay.util.AlipayUtil;
import com.alipay.demo.trade.model.ExtendParams;
import com.alipay.demo.trade.model.GoodsDetail;
import com.alipay.demo.trade.model.result.AlipayF2FPrecreateResult;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class AlipayServiceImpl implements AlipayService {

    @Override
    public AlipayF2FPrecreateResult generateQRCode(QRCode qrCode) {

        // (必填) 商户网站订单系统中唯一订单号，64个字符以内，只能包含字母、数字、下划线，
        // 需保证商户系统端不能重复，建议通过数据库sequence生成，
//        String outTradeNo = request.getParameter("outTradeNo");

        // (必填) 订单标题，粗略描述用户的支付目的。如“喜士多（浦东店）消费”
//        String subject = request.getParameter("subject");

        // (必填) 订单总金额，单位为元，不能超过1亿元
        // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
//        String totalAmount = request.getParameter("totalAmount");

        // (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
        // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
//        String undiscountableAmount = request.getParameter("undiscountableAmount");

        // 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账号，(打款到sellerId对应的支付宝账号)
        // 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
        qrCode.setSellerId("");

        // 订单描述，可以对交易或商品进行一个详细地描述，比如填写"购买商品2件共15.00元"
        qrCode.setBody("购买商品2件共15.00元");

        // 商户操作员编号，添加此参数可以为商户操作员做销售统计
        qrCode.setOperatorId("test_operator_id");

        // (必填) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
        qrCode.setStoreId("test_store_id");

        // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，详情请咨询支付宝技术支持
        ExtendParams extendParams = new ExtendParams();
        extendParams.setSysServiceProviderId("2088100200300400500");

        // 支付超时，定义为120分钟
        qrCode.setTimeoutExpress("5m");

        // 商品明细列表，需填写购买商品详细信息，
        List<GoodsDetail> goodsDetailList = new ArrayList<GoodsDetail>();
        // 创建一个商品信息，参数含义分别为商品id（使用国标）、名称、单价（单位为分）、数量，如果需要添加商品类别，详见GoodsDetail
        GoodsDetail goods1 = GoodsDetail.newInstance("goods_id001", "全麦小面包", 1500, 1);
        // 创建好一个商品后添加至商品明细列表
        goodsDetailList.add(goods1);

        // 继续创建并添加第一条商品信息，用户购买的产品为“黑人牙刷”，单价为5.05元，购买了两件
        GoodsDetail goods2 = GoodsDetail.newInstance("goods_id002", "黑人牙刷", 505, 2);
        goodsDetailList.add(goods2);

        qrCode.setGoodsDetailList(goodsDetailList);

        AlipayF2FPrecreateResult result = AlipayUtil.generateQRCode(qrCode.getOutTradeNo(), qrCode.getSubject(), qrCode.getTotalAmount(), qrCode.getUndiscountableAmount(), qrCode.getSellerId(), qrCode.getBody(), qrCode.getOperatorId(), qrCode.getStoreId(), qrCode.getTimeoutExpress(), qrCode.getGoodsDetailList());

        return result;
    }
}
